package com.chenziwen.scala.exercises.chapter2

object Chapter2_1 {
  def main(args: Array[String]): Unit = {
    // 1、一个数字如果为正数，则它的signum为1;如果是负数,则signum为-1;如果为0,则signum为0.编写一个函数来计算这个值


    def signum(num: Int): Int = {
      if (num > 0) 1
      else if (num < 0) -1
      else 0
    }

    println(1.signum)
    println(-1.signum)
    println(0.signum)

    def countdown(n: Int) {
      (0 to n).reverse.foreach(print)
    }

    countdown(10)
    println("-------------------------------------")
    //编写一个for循环,计算字符串中所有字母的Unicode代码（toLong方法）的乘积。举例来说，"Hello"中所有字符串的乘积为9415087488L

    val str = "Hello"


    def unicodeMulti(str: String): Unit = {
      var result: Long = 1
      for (i <- str) {
        result = result * i.toLong
      }
      println(result)
    }

    unicodeMulti(str)

    var result: Long = 1
    str.foreach(result *= _.toLong)
    println(result)

    // 编写一个函数product(s:String)，计算字符串中所有字母的Unicode代码（toLong方法）的乘积
    def product(str: String): Long = {
      var result: Long = 1
      for (i <- str) {
        result = result * i.toLong
      }
      result
    }

    println(product(str))

    // 将上一个函数变成递归函数
    def reProduct(str: String): Long = {
      if (str.length == 1) {
        str.charAt(0).toLong
      } else {
        // take方法取出字符串的第一个字符
        // drop方法去掉字符串的第一个字符，剩下的内容
        str.take(1).charAt(0).toLong * reProduct(str.drop(1))
      }
    }

    println(reProduct(str))

    def xn(x: Double, n: Int): Double = {
      if (n == 0) 1
      else if (n > 0) x * xn(x, n - 1)
      else 1 / xn(x, -n)
    }


  }
}
